//字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串，编写一个函数判定它们是否只需要一次(或者零次)编辑。 
//
// 
//
// 示例 1： 
//
// 
//输入：
//first = "pale"
//second = "ple"
//输出：True 
//
// 
//
// 示例 2： 
//
// 
//输入：
//first = "pales"
//second = "pal"
//输出：False
// 
//
// Related Topics 双指针 字符串 👍 267 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-06-03 23:34:35
 * @description 面试题 01.05.一次编辑
 */
public class OneAwayLcci{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 OneAwayLcci fun=new OneAwayLcci();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
		public boolean oneEditAway(String first, String second) {
			int lf = first.length(), ls = second.length();
			if (lf > ls)
				// 始终保证 2>1
				return oneEditAway(second, first);
			if (ls - lf > 1)
				return false;
			if (lf == ls) { //对应编辑
				int count = 0;
				for (int i = 0; i < lf; i++) {
					if (first.charAt(i) != second.charAt(i))
						count += 1;
				}
				return count <= 1;
			}
			int i = 0, ofs = 0;
			while (i < lf) {  //对应删除或者插入
				if (first.charAt(i) != second.charAt(i + ofs)) {
					if (++ofs > 1)
						return false;
				} else {
					i += 1;
				}
			}
			return true;
		}
}
//leetcode submit region end(Prohibit modification and deletion)

}
